package br.com.sca.bean;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import br.com.sca.entity.Usuario;
import br.com.sca.service.UsuarioService;

@ManagedBean(name = "usuarioFacesBean")
@Component
@Scope(value = "session")
public class UsuarioFacesBean {

	private Usuario usuario;
	private List<Usuario> usuarios = new ArrayList<Usuario>();
	private boolean isCadastrar;

	@Autowired
	private UsuarioService usuarioService;

	public String redirecionarCadastroUsuario() {
		usuario = new Usuario();
		setCadastrar(true);
		return "/cadastrar/cadastrarUsuario.xhtml?faces-redirect=true";
	}

	public String redirecionarPaginaAlterar() {
		setCadastrar(false);
		return "/cadastrar/cadastrarUsuario.xhtml?faces-redirect=true";
	}

	public List<Usuario> getAll() throws IOException {
		try {
			usuarios = usuarioService.getAll();
		} catch (Exception e) {
			e.printStackTrace();
		}
		gravarUsuarioArquivoTxt(usuarios);
		return usuarios;
	}

	public String cadastarUsuario() {
		try {
			usuarioService.persistirEntidade(usuario);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "/listar.xhtml?faces-redirect=true";
	}

	public String atualizarUsuario() {
		try {
			usuarioService.updateEntidade(usuario);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "/listar.xhtml?faces-redirect=true";
	}

	public String excluirPessoa() {
		try {
			usuarioService.excluirEntidade(usuario);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return "/listar.xhtml?faces-redirect=true";
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public boolean getCadastrar() {
		return isCadastrar;
	}

	public void setCadastrar(boolean isCadastrar) {
		this.isCadastrar = isCadastrar;
	}

	private void gravarUsuarioArquivoTxt(List<Usuario> usuarios) throws IOException {
		File dir = new File("c:\\arquivoTxt");
		dir.mkdir();
		File file = new File(dir, "file.txt");
		file.createNewFile();

		FileWriter fileWriter = new FileWriter(file, false);
		PrintWriter printWriter = new PrintWriter(fileWriter);
		for (Usuario usuario : usuarios) {
			printWriter.print(usuario.getId() + ";");
			printWriter.print(usuario.getNome() + ";");
			printWriter.print(usuario.getEndereco() + ";");
			printWriter.println();
		}
		printWriter.flush();
		printWriter.close();

		// Leitura de arquivo
		FileReader fileReader = new FileReader(file);
		BufferedReader reader = new BufferedReader(fileReader);
		String linha = "";

		List<String> usuarios2 = new ArrayList<String>();
		while ((linha = reader.readLine()) != null) {
			// System.out.println(linha);
			if (linha != null && !linha.isEmpty()) {
				usuarios2.add(linha);
			}
		}

		fileReader.close();
		reader.close();

		for (String s : usuarios2) {
			String[] values = s.split(";");

			Usuario usuario = new Usuario();
			usuario.setId(Long.valueOf(values[0]));
			usuario.setNome(values[1]);
			usuario.setEndereco(values[2]);

			System.out.println(usuario.toString());
		}

	}

}
